"""
server_simple.py - 简化版游戏服务器
只提供静态文件服务，游戏逻辑完全在前端
"""

import os
import json
from http.server import HTTPServer, SimpleHTTPRequestHandler
import urllib.parse

class GameFileHandler(SimpleHTTPRequestHandler):
    """
    游戏文件处理器
    提供静态文件服务，支持HTML、CSS、JavaScript和图标文件
    """
    
    def do_GET(self):
        """处理GET请求"""
        parsed_path = urllib.parse.urlparse(self.path)
        path = parsed_path.path
        
        # 默认返回游戏页面
        if path == '/' or path == '/index.html':
            path = '/game.html'
        
        # 构建文件路径
        if path.startswith('/'):
            path = path[1:]
        
        if not path:
            path = 'game.html'
        
        # 检查文件是否存在
        if os.path.exists(path):
            self.send_response(200)
            
            # 根据文件扩展名设置Content-Type
            if path.endswith('.html'):
                self.send_header('Content-type', 'text/html; charset=utf-8')
            elif path.endswith('.css'):
                self.send_header('Content-type', 'text/css')
            elif path.endswith('.js'):
                self.send_header('Content-type', 'application/javascript')
            elif path.endswith('.png'):
                self.send_header('Content-type', 'image/png')
            elif path.endswith('.jpg') or path.endswith('.jpeg'):
                self.send_header('Content-type', 'image/jpeg')
            elif path.endswith('.json'):
                self.send_header('Content-type', 'application/json')
            else:
                self.send_header('Content-type', 'application/octet-stream')
            
            self.end_headers()
            
            # 读取并发送文件内容
            try:
                with open(path, 'rb') as f:
                    self.wfile.write(f.read())
            except Exception as e:
                print(f"读取文件失败: {e}")
                self.send_error(500, f"Internal server error: {e}")
        else:
            # 文件不存在，返回404
            self.send_response(404)
            self.end_headers()
            self.wfile.write(b'404 Not Found')
    
    def do_POST(self):
        """处理POST请求（简单版本不需要POST功能）"""
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        
        response = {
            "status": "success",
            "message": "POST requests are not supported in this simple server",
            "timestamp": self.date_time_string()
        }
        
        self.wfile.write(json.dumps(response).encode('utf-8'))
    
    def log_message(self, format, *args):
        """简化日志输出"""
        # 只记录重要信息，减少控制台输出
        pass


class SimpleGameServer:
    """
    简化版游戏服务器
    只需要提供静态文件即可运行游戏
    """
    
    def __init__(self, port=8086):
        self.port = port
        self.server = None
    
    def start(self, background=False):
        """启动服务器"""
        import threading
        
        server_address = ('', self.port)
        self.server = HTTPServer(server_address, GameFileHandler)
        
        print("=" * 60)
        print("城市建造游戏 - 专业版")
        print("=" * 60)
        print(f"服务器启动在: http://localhost:{self.port}")
        print("游戏特点:")
        print("  • 完全前端操作，无需刷新页面")
        print("  • 50x50超大地图网格")
        print("  • 6种建筑类型: 空白/道路/住宅/商业/工业/公园")
        print("  • 导入/导出JSON存档功能")
        print("  • 自动保存到本地存储")
        print("  • 键盘快捷键支持 (1-6切换模式, Ctrl+S导出)")
        print("=" * 60)
        print("使用说明:")
        print("  1. 点击导航栏按钮选择建筑类型")
        print("  2. 点击地图网格进行建造")
        print("  3. 使用右侧按钮导入/导出游戏")
        print("  4. 游戏会自动保存到浏览器本地存储")
        print("=" * 60)
        
        if background:
            server_thread = threading.Thread(target=self.server.serve_forever, daemon=True)
            server_thread.start()
            print("服务器已在后台运行")
        else:
            try:
                print("按 Ctrl+C 停止服务器")
                print("=" * 60)
                self.server.serve_forever()
            except KeyboardInterrupt:
                print("\n服务器已停止")
    
    def stop(self):
        """停止服务器"""
        if self.server:
            self.server.shutdown()
            print("游戏服务器已停止")


def main():
    """主函数"""
    print("正在启动城市建造游戏服务器...")
    
    # 检查必要的文件
    required_files = ['game.html', 'pgame/icons/']
    
    for file in required_files:
        if not os.path.exists(file):
            print(f"错误: 缺少必要文件 '{file}'")
            print("请确保以下文件存在:")
            print("  - game.html (游戏主页面)")
            print("  - pgame/icons/ (图标目录)")
            return
    
    server = SimpleGameServer(port=8086)
    server.start()


if __name__ == "__main__":
    main()
